package com.kaifamiao.demo.d0816;

import java.util.*;

public class Demo {

    public static void main(String[] args) {
        /**
         * Map 存储 key-value， key 不能重复，value 可以重复
         *  key-value 是一个 Map.Entry 对象
         *  key 的集合 keySet()
         *  value 的集合 values()
         *  entry 的集合 entrySet()
         *
         *  存元素  put(key, value)
         *  取元素  get(key)  getOrDefault(Object key, V defaultValue)
         *  删除元素 remove(key)  remove(key, value)  clear()
         *  替换  replace(key, newValue)  replace(key, oldValue, newValue)
         *  判断是否存在 key containsKey(key)
         *  判断是否存在 value containsValue(value)
         *  map 的大小（元素(entry)的个数） size()
         *  map 是否是空的 isEmpty()
         *
         *  TreeMap 非线程安全，key 不能是 null。要求 key 是可比较的
         *    new TreeMap()  new TreeMap(comparator)
         */
        Map map = new TreeMap();
//        TreeMap map1 = (TreeMap) map;

        map.put("a", 1);
        map.put("z", 26);
        map.put("c", 3);
        map.put("f", 6);
        map.put("e", 6);
        map.put("z", 66); // map.replace("z", 66);
        map.put("zzz", null);
        map.put("zzx", null);

        System.out.println(map.isEmpty()); // false
        System.out.println(map.size()); // 4
        System.out.println(map);

        System.out.println(map.get("a")); // 1

        if (map.containsKey("a")){
            map.replace("a", 11);
        } else {
            map.put("a", "a");
        }

        System.out.println(map);

        System.out.println(map.put("a", 111));
        System.out.println(map.put("x", 2));
        System.out.println(map);

        // 迭代 map
        Collection entrySet = map.entrySet();
        for(Object obj : entrySet) {
            if (obj instanceof Map.Entry entry){
                System.out.println(entry.getKey() + " , " + entry.getValue());
            }
        }

//        Iterator iterator = entrySet.iterator();
//
//        while (iterator.hasNext()){
//            Object next = iterator.next();
//            if (next instanceof Map.Entry entry){
//                System.out.println(entry.getKey() + " , " + entry.getValue());
//            }
//
//        }

    }
}
